Three Dimensional (3D) models with low geometric detail may not fully convey the desired complexity of a 3D object. Higher detailed objects with a larger number of smaller polygons and an increased number of vertices are better suited for use in certain scenarios. However, using a finely detailed object defined by a larger number of vertices requires a larger amount of system resources than a coarsely detailed object. Accordingly, as the number of polygons and vertices increases in accordance with higher geometric detail, the 3D graphics engine will approach the limit of available processing capability and system bandwidth.
Graphics engines featuring support for hardware accelerated tessellation provide one solution by allowing the creation of geometrically complex 3D objects for use in the final 3D scene while storing and animating less complex objects using a relatively low number of polygons. Coarse geometric models are stored and animated, then the polygons of the geometric model are increased in detail by subdividing the polygons into smaller, more finely detail polygons during the rendering of the final 3D object, allowing an adaptable level of geometric detail. Hardware accelerated tessellation can be accomplished utilizing small programs known as “shaders” that execute on the graphics engine. Graphics applications generally supply shader programs in a high level language, along with polygons, textures, and other object data, as defined by one or more published Application Programming Interface (API). Such high level shaders are not hardware specific, so manufacturers of graphics hardware provide functionality to convert high level shader input into low level commands tailored for specific hardware. In some instances those commands are run in parallel on the graphics hardware when multi-threaded shader execution is supported.
Modern graphics engines utilize multiple parallel processors referred to as “shader cores” to execute multiple simultaneous threads of shader instructions. As high level shader programs are converted into low level commands, hardware specific optimizations are often included into the programs to better utilize the features of specific graphics hardware. Some graphics engines are designed explicitly to perform a large number of parallel operations using a larger number of shader cores, each executing a small number of instructions, while other graphics engines feature a smaller number of relatively more powerful shader cores capable of performing a larger number of instructions per core.